#ifndef INTERFACE_CONTROL_H
#define INTERFACE_CONTROL_H

#include "login.h"
#include "groupchat.h"
#include "friends.h"
#include "friend.h"
#include "widget.h"
#include "enroll.h"
#include "find.h"

#include <QMap>


class Interface_Control
{

private:
    static Interface_Control* m_ptr;
    Login* m_login;
    GroupChat* m_gro;
    Widget* m_fr;
    Enroll* m_enr;
    Find* m_find;
    Friends * m_s;
public:
    //聊天界面的管理map
    QMap<QString,GroupChat*> m_gromap;

    Interface_Control();
    ~Interface_Control()
    {
        //清除聊天界面指针
        auto it = m_gromap.begin();
        GroupChat* de ;
        for(;it != m_gromap.end();)
        {
            de = it.value();
            it = m_gromap.erase(it);
            if(de != nullptr)
            {
                delete de;
                de = nullptr;
            }
        }

        //清除其他堆区对象
        delete m_ptr;
        delete m_login;
        delete m_gro;
        delete m_fr;
        delete m_enr;
        delete m_find;
        delete m_s;

    }

    static Interface_Control* getControlptr()
    {
        if(m_ptr == nullptr)
        {
            m_ptr = new Interface_Control();
        }

        return m_ptr;
    }

    //登录管理
    void showLogin()
    {
        if(m_login == nullptr)
        {
            m_login = new Login();
        }
        m_login->showID();
        m_login->show();
    }

    void hideLogin()
    {
        if(m_login == nullptr)
        {
            return;
        }
        m_login->hide();
    }

    void set_m_login(Login *ptr)
     {
         m_login = ptr;
     }

    Login* getm_login()
    {
        if(m_login == nullptr)
        {
            m_login = new Login();
        }
        return m_login;
    }


////    聊天界面管理
//    void set_m_gro(GroupChat* ptr)
//    {
//        m_gro = ptr;
//    }
//    //测试
//    GroupChat* get_m_gro()
//    {
//        if(m_gro == nullptr)
//        {
//            m_gro = new GroupChat();
//        }

//        return m_gro;
//    }

//    void showm_gro()
//    {
//        if(m_gro == nullptr)
//        {
////            m_gro = new GroupChat();
//            qDebug()<<"聊天对象数据为空";
//            return ;

//        }
//        m_gro->show();
//    }

//    void haidm_gro()
//    {
//        if(m_gro == nullptr)
//        {
//            return;
//        }

//        m_gro->hide();
//    }



    //主界面
    void setm_fr(Widget* fr)
    {
        m_fr = fr;
    }

    Widget* getm_fr()
    {
        if(m_fr == nullptr)
        {
            return nullptr;
        }
        return m_fr;
    }

    void showm_fr()
    {
        if(m_fr == nullptr)
        {
            qDebug()<<"断点3";
            m_fr = new Widget();
        }
        qDebug()<<"断点4";
        m_fr->show();
    }

    void hidem_fr()
    {
        if(m_fr == nullptr)
        {
            return;
        }
        m_fr->hide();
    }


    //聊天界面管理（map）
    void setGro_map(QString ID,GroupChat* prt)
    {
        m_gromap.insert(ID,prt);
    }
    //查找相应界面指针
    GroupChat* geto_map(QString ID)
    {
       auto it = m_gromap.find(ID);
       if(it == m_gromap.end())
       {
           return nullptr;
       }
       return it.value();
    }

    //注册界面
    void hidem_enr()
    {
        if(m_enr == nullptr)
        {
            qDebug()<<"注册界面为空";
            return;
        }
        m_enr->hide();
    }
    void showm_enr()
    {
        if(m_enr == nullptr)
        {
            m_enr = new Enroll();
        }
        m_enr->show();
    }

    Enroll* getm_enr()
    {
        if(m_enr == nullptr)
        {
            m_enr = new Enroll();
        }
        return m_enr;
    }


    //查询界面的管理
    void showm_find()
    {
        if(m_find == nullptr)
        {
            m_find = new Find();
        }
        m_find->show();
    }

     void hidem_find()
     {
         if(m_find == nullptr)
         {
             qDebug()<<"查询界面为空";
             return;
         }
         m_find->hide();
     }

     Find* getFind()
     {
         if(m_find == nullptr)
         {
             m_find = new Find();
         }
         return m_find;
     }

     //好友界面的指针
     void setm_s(Friends* k)
     {
         m_s = k;
     }

     Friends* getm_s()
     {
         if(m_s == nullptr)
         {
             return nullptr;
         }

         return m_s;
     }
};

#endif // INTERFACE_CONTROL_H
